package imsdk

import (
	"encoding/json"
	"longmen/server/config/global"
	"longmen/server/pkg/common/helper/http"
	"math/rand"
)

type (
	SendUserMsg struct {
		SyncOtherMachine int8      `json:"SyncOtherMachine,omitempty"` // 消息不同步至发送方
		ToAccount        string    `json:"To_Account"`                 // 必填
		MsgLifeTime      int       `json:"MsgLifeTime"`                // 消息离线保存时长（单位：秒），最长为7天（604800秒）
		MsgRandom        int32     `json:"MsgRandom"`
		MsgBodies        []MsgBody `json:"MsgBody"`
	}

	MsgBody struct {
		MsgType    string     `json:"MsgType"`
		MsgContent MsgContent `json:"MsgContent"`
	}
	MsgContent struct {
		Data  string `json:"Data,omitempty"`
		Desc  string `json:"Desc,omitempty"`
		Ext   string `json:"Ext,omitempty"` //  WARING: 不要给EXT 字段加值， 客户端会通过ext字段来switch逻辑，私聊消息不需要ext字段
		Sound string `json:"Sound,omitempty"`
	}
)

// SendUser 主动发送给用户
// WARING: 不要给EXT 字段加值， 客户端会通过ext字段来switch逻辑，私聊消息不需要ext字段
func (s sdk) SendUser(account, body string) error {
	random := rand.Int31()
	url := s.BuildRestfulUrl("/openim/sendmsg")

	var msgBodies = []MsgBody{
		{
			MsgType:    "TIMCustomElem",
			MsgContent: MsgContent{Data: body},
		},
	}

	j, err := json.Marshal(SendUserMsg{
		MsgRandom: random,
		ToAccount: account,
		MsgBodies: msgBodies,
	})
	if err != nil {
		return err
	}

	r, err := http.HttpPost(url, string(j), connTimeoutMs, serveTimeoutMs, "application/json")
	if err != nil {
		global.Log.Errorf("SendUser error: %v, result: %s", err, r)
		return err
	}
	//global.Log.Debugf("request: %s", bytesconv.BytesToString(r))
	return nil
}
